//大数据查重
#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;
int main()
{
    //找出第一个没有重复出现过的字符
    string str = "jjlasdfghlc";
    unordered_map<char,int> map;
    for(const auto ch : str) {
        map[ch]++;
    }
    //如果遍历unordered_map，一定不是按照插入顺序遍历的
    for(const auto ch : str) {
        if(map[ch] == 1){
            cout << "第一个没有重复元素是 ： " << ch <<endl;
            return 0;
        }
    }
    cout << "没有重复\n";
    return 0;
}

/*
int main()
{
    vector<int> vec;
    vec.reserve(10000);
    srand(time(NULL));
    for(int i = 0;i < 10000;i++) {
        vec.push_back(rand() % 10000);
    }
    // //1.找第一个出现重复的数字
    // //将全部元素插入unordered_set，如果元素有重复的，那么就能从set中找到。查询时间复杂的O(1)
    // unordered_set<int> set;
    // for(auto i : vec) {
    //     auto iter = set.find(i);
    //     if(iter != set.end()) {
    //         cout << i << endl;
    //         return 0;
    //     }
    //     set.emplace(i);
    // }
    // //2.找所有重复的数字
    // unordered_set<int> set2;
    // for(auto i : vec) {
    //     auto iter = set2.find(i);
    //     if(iter != set2.end()) {
    //         cout << i << endl;
    //     }
    //     set2.emplace(i);
    // }
    // //3.查找重复多少次
    // //使用unordered_map,key存放元素，value存放重复次数
    // unordered_map<int,int> map1;
    // for(auto i : vec) {
    //     auto iter = map1.find(i);
    //     if(iter != map1.end()) {
    //         iter->second++;
    //     } else {
    //         map1.emplace(i,1);
    //     }
    // }
    // for(auto pa : map1) {
    //     if(pa.second > 1) {
    //         cout << pa.first << " : "<< pa.second <<endl;
    //     }
    // }
    // 4.一组数字有些是重复的，把重复的数据去掉
    // unordered_set<int> set3;
    // for(auto i : vec) {
    //     set3.emplace(i);
    // }

}
*/